//package com.tengju.bff.interfaces.manage.crm.activity.facade;
//
//import com.beust.jcommander.internal.Lists;
//import com.tengju.bff.interfaces.manage.crm.activity.facade.assembler.QueryAssembler;
//import com.tengju.bff.interfaces.manage.crm.activity.form.*;
//import com.tengju.bff.interfaces.manage.crm.activity.vo.ActivityCalendarVO;
//import com.tengju.bff.interfaces.manage.crm.activity.vo.ActivityDetailVO;
//import com.tengju.bff.interfaces.manage.crm.activity.vo.DimVO;
//import com.tengju.bff.interfaces.manage.crm.activity.vo.SaleTargetValueVO;
//import com.tengju.bff.interfaces.manage.crm.user.vo.NicknameVO;
//import com.tengju.bff.interfaces.shared.Formatter;
//import com.tengju.bff.interfaces.shared.*;
//import com.tengju.bff.interfaces.shared.render.ChartVO;
//import com.tengju.bff.interfaces.shared.render.KVAssembler;
//import com.tengju.bff.interfaces.shared.servlet.ServletContextUtil;
//import com.tengju.bff.interfaces.shared.servlet.UserServletContext;
//import com.tengju.data.domain.model.activity.*;
//import com.tengju.data.domain.model.analysis.Meta;
//import com.tengju.data.domain.model.analysis.MetaHolder;
//import com.tengju.data.domain.model.analysis.Row;
//import com.tengju.data.domain.model.user.StarLevelEnum;
//import com.tengju.data.domain.shared.CastUtil;
//import com.tengju.data.domain.shared.DateUtil;
//import com.tengju.data.domain.shared.IdObject;
//import com.tengju.data.domain.shared.Month;
//import com.tengju.motivation.domain.model.activity.ActivityTargetMeta;
//import com.tengju.motivation.domain.model.performance.MotivationActivityTargetMetaRepository;
//import com.tengju.user.application.user.UserDocumentService;
//import com.tengju.user.application.user.dto.UserSearchForm;
//import com.tengju.user.domain.model.doc.UserDocument;
//import com.tengju.user.domain.model.user.SsoUserId;
//import com.tengju.user.domain.model.user.StaffInfo;
//import com.tengju.user.domain.model.user.StaffSimpleInfo;
//import com.tengju.user.domain.model.user.UserIdCode;
//import com.tengju.user.domain.service.DepartmentExternalService;
//import lombok.RequiredArgsConstructor;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import org.springframework.util.CollectionUtils;
//
//import java.math.BigDecimal;
//import java.math.RoundingMode;
//import java.time.LocalDate;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//import java.util.function.Function;
//import java.util.stream.Collectors;
//
//@Service
//@RequiredArgsConstructor(onConstructor_ = {@Autowired})
//@Deprecated
//public class DeprecatedActivityTargetAnalysisFacade {
//
//    private final UserDocumentService userDocumentService;
//    private final MetaHolder metaHolder;
//    private final ActivityTargetAnalysisRepository activityTargetAnalysisRepository;
//    private final ActivityTargetRepository activityTargetRepository;
//    private final DepartmentExternalService departmentExternalService;
//    private final MotivationActivityTargetMetaRepository motivationActivityTargetMetaRepository;
//
//
//    @Value("#{${sso.department.leader}}")
//    Map<Long, Long> departmentLeader;
//
//
//    public ActivityDetailVO detail(ActivityId activityId) {
//        ActivityDetail activity = activityTargetRepository.getActivityById(activityId);
//        if (activity == null) {
//            return null;
//        }
//        List<LocalDate> localDates = activity.activityDays();
//        List<KVVO> activityDate = localDates.stream()
//                .map(this::dateVO)
//                .collect(Collectors.toList());
//        List<KVVO> resultDate = new ArrayList<>();
//        String startDesc = "";
//        String endDesc = "";
//        if (activity.getStartTime() != null) {
//            startDesc = activity.getStartTime().format(DateTimeFormatter.ofPattern("MM月dd日"));
//        }
//        if (activity.getEndTime() != null) {
//            endDesc = activity.getEndTime().format(DateTimeFormatter.ofPattern("MM月dd日"));
//        }
//        resultDate.add(KVVO.of(String.format("按活动期(%s-%s)", startDesc, endDesc), "ALL", ActivityDataType.ALL.name()));
//        resultDate.addAll(activityDate);
//        return new ActivityDetailVO(activity.getActivityName(), resultDate);
//    }
//
//    private KVVO dateVO(LocalDate localDate) {
//        String dateDesc = localDate.format(DateTimeFormatter.ofPattern("MM月dd日"));
//        String dateVal = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
//        return KVVO.of(dateDesc, dateVal, ActivityDataType.DAY.name());
//    }
//
//    public List<KVVO<String, Integer>> getKanbanTypes() {
//        return Arrays.stream(KanbanType.values())
//                .map(kanbanType -> KVVO.of(kanbanType.getDesc(), kanbanType.getVal()))
//                .collect(Collectors.toList());
//    }
//
//    public List<KVVO<String, Integer>> getTargetTypes() {
//        return Arrays.stream(TargetType.values())
//                .map(targetType -> KVVO.of(targetType.getDesc(), targetType.getVal()))
//                .collect(Collectors.toList());
//    }
//
//    public List<KVVO> getSaleBrandTypes(ActivityBaseQuery queryDTO) {
//        Row rowAll = new Row();
//        rowAll.put("dimName", "总销售");
//        rowAll.put("dimId", -999);
//        rowAll.put("subjectType", 40);
//        List<Row> rows = new ArrayList<>();
//        rows.add(rowAll);
//        ActivityViewReachQuery query = QueryAssembler.assemblerToQuery(queryDTO);
//        query.setTargetType(TargetType.SALE.getVal());
//        return getKVVOs(rows, query);
//    }
//
//    public List<KVVO> getPullGiftTypes(ActivityBaseQuery queryDTO) {
//        Row rowAll = new Row();
//        rowAll.put("dimName", "总招募");
//        rowAll.put("dimId", -999);
//        rowAll.put("subjectType", 40);
//        List<Row> rows = new ArrayList<>();
//        rows.add(rowAll);
//        ActivityViewReachQuery query = QueryAssembler.assemblerToQuery(queryDTO);
//        query.setTargetType(TargetType.PULL.getVal());
//        return getKVVOs(rows, query);
//    }
//
//    private List<KVVO> getKVVOs(List<Row> rows, ActivityViewReachQuery query) {
//        List<Row> dimInfoList = activityTargetAnalysisRepository.getDimInfoList(query);
//        if (!CollectionUtils.isEmpty(dimInfoList)) {
//            rows.addAll(dimInfoList);
//        }
//        return rows.stream()
//                .map(v ->
//                        KVVO.of(v.getValue("dimName").toString(),
//                                CastUtil.castString(v.getValue("subjectType")) + '+' + CastUtil.castString(v.getValue("dimId")),
//                                new DimVO(CastUtil.castInt(v.getValue("subjectType")), CastUtil.castInt(v.getValue("dimId"))))
//                )
//                .collect(Collectors.toList());
//    }
//
//    public ActivityCalendarVO getActivityCalendar(ActivityCalendarQuery query) {
//        List<KVVO<String, String>> dateTime = new ArrayList<>();
//        Month month = new Month(query.getMonthInt());
//        List<ActivityDetail> activityDetails = activityTargetRepository.getActivityInfo(month.getStartDate(), month.getEndDate());
//        List<Long> activityIds = activityDetails.stream()
//                .map(ActivityDetail::getActivityId).map(IdObject::getValue).collect(Collectors.toList());
//        Map<ActivityId, ActivityDetail> activityDetailMap = activityDetails.stream()
//                .collect(Collectors.toMap(ActivityDetail::getActivityId, Function.identity()));
//
//        List<ActivityTargetMeta> targetMetas =
//                motivationActivityTargetMetaRepository.getActivityTargetMetaByActivityId(activityIds);
//
//        List<ActivityDetail> resultDetails = Lists.newArrayList();
//        for (ActivityTargetMeta targetMeta : targetMetas) {
//            ActivityDetail activityDetail = activityDetailMap.get(new ActivityId(targetMeta.getActivityId()));
//            if (activityDetail != null) {
//                resultDetails.add(activityDetail);
//            }
//        }
//
//        //开始时间排序
//        TreeSet<ActivityDetail> sortActivity = new TreeSet<>(resultDetails);
//        List<List<ActivityDetail>> schedule = schedule(sortActivity, month.getStartDate(), month.getEndDate());
//        LocalDate start = month.getStartDate();
//        while (start.isBefore(month.nextMonth().getStartDate())) {
//            dateTime.add(KVVO.of(DateUtil.formatLocalDate(start), start.toString()));
//            start = start.plusDays(1L);
//        }
//        return new ActivityCalendarVO(dateTime, schedule);
//    }
//
//    private List<List<ActivityDetail>> schedule(TreeSet<ActivityDetail> sortActivity, LocalDate startTime, LocalDate endTime) {
//
//        List<List<ActivityDetail>> result = Lists.newArrayList();
//        while (sortActivity.size() > 0) {
//            LocalDate timeNode = LocalDate.MIN;
//            Iterator<ActivityDetail> iterator = sortActivity.iterator();
//            List<ActivityDetail> xAxis = Lists.newArrayList();
//            while (iterator.hasNext()) {
//                ActivityDetail activityDetail = iterator.next();
//                if (activityDetail.getStartTime().isAfter(timeNode)) {
//                    //与查询月份时间取交集
//                    activityDetail.subPeriod(startTime, endTime);
//                    xAxis.add(activityDetail);
//                    iterator.remove();
//                    timeNode = activityDetail.getEndTime();
//                }
//            }
//            result.add(xAxis);
//        }
//
//        return result;
//
//    }
//
//
//    public List<SaleTargetValueVO> getActivityCalendarTarget(ActivityCalendarTargetQuery query) {
//        List<SaleTargetValueVO> res = new ArrayList<>();
//        List<UserIdCode> genSecIdCodeList = ServletContextUtil.getServletContext().getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodeList)) {
//            return Lists.newArrayList();
//        }
//        Row bugGmvCntRow = activityTargetAnalysisRepository.getActivityGmvCntTotal(genSecIdCodeList, new ActivityId(query.getActivityId()), KanbanType.fromVal(query.getKanbanType()));
//        if (bugGmvCntRow != null) {
//            String saleTargetValue = bugGmvCntRow.getValue("sale_target_value").toString();
//            String pullTargetValue = bugGmvCntRow.getValue("pull_target_value").toString();
//            String buy_gmv = bugGmvCntRow.getValue("buy_gmv").toString();
//            String buy_cnt = bugGmvCntRow.getValue("buy_cnt").toString();
//            res.add(new SaleTargetValueVO(KVVO.of("销售：", new AmountVO(AmountType.NUMBER_2, saleTargetValue).toString()), KVVO.of("已完成：", Formatter.calRate(buy_gmv, saleTargetValue)), KVVO.of("", "(" + new AmountVO(AmountType.NUMBER_2, buy_gmv).toString() + ")")));
//            res.add(new SaleTargetValueVO(KVVO.of("招募：", new AmountVO(AmountType.NUMBER_2, pullTargetValue).toString()), KVVO.of("已完成：", Formatter.calRate(buy_cnt, pullTargetValue)), KVVO.of("", "(" + new AmountVO(AmountType.NUMBER_2, buy_cnt).toString() + ")")));
//        } else {
//            res.add(new SaleTargetValueVO(KVVO.of("销售：", "-"), KVVO.of("已完成：", "-"), KVVO.of("", "( - )")));
//            res.add(new SaleTargetValueVO(KVVO.of("招募：", "-"), KVVO.of("已完成：", "-"), KVVO.of("", "( - )")));
//        }
//        return res;
//    }
//
//    public List<KVVO> saleOverview(ActivityQueryDTO query) {
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return Lists.newArrayList();
//        }
//        ActivityAnalysisQuery activityAnalysisQuery = QueryAssembler.assemblerToQuery(query, genSecIdCodes, null);
//        activityAnalysisQuery.setTargetType(TargetType.SALE.getVal());
//        Row rows = activityTargetAnalysisRepository.saleOverview(activityAnalysisQuery);
//        List<KVVO> result = Lists.newArrayList();
//
//        Double target = (Double) rows.getValue("targetValue");
//        Double complete = (Double) rows.getValue("completeValue");
//        Double total = (Double) rows.getValue("totalGmv");
//
//        result.add(KVVO.of("总目标", new AmountVO(AmountType.NUMBER_2, target)));
//        result.add(KVVO.of("已完成", new AmountVO(AmountType.NUMBER_2, complete)));
//        result.add(KVVO.of("完成率", new AmountVO(AmountType.TARGET_PERCENT, BigDecimal.valueOf(target).doubleValue() == 0 ?
//                BigDecimal.ZERO : BigDecimal.valueOf(complete).divide(BigDecimal.valueOf(target), 5, RoundingMode.FLOOR))));
//        result.add(KVVO.of("大盘完成占比", new AmountVO(AmountType.TARGET_PERCENT, BigDecimal.valueOf(total).doubleValue() == 0 ?
//                BigDecimal.ZERO : BigDecimal.valueOf(complete).divide(BigDecimal.valueOf(total), 5, RoundingMode.FLOOR))));
//        return result;
//    }
//
//    public TableVO saleTargetTable(ActivityQueryDTO query) {
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityAnalysisQuery activityAnalysisQuery = QueryAssembler.assemblerToQuery(query, genSecIdCodes, null);
//        activityAnalysisQuery.setTargetType(TargetType.SALE.getVal());
//        List<Row> rows = activityTargetAnalysisRepository.saleTarget(activityAnalysisQuery);
//        TableVO tableVO = new TableVO();
//        Collection<Meta> metas = metaHolder.listMeta("activity_sale_target_table").values();
//        TableAssembler.buildColumns(tableVO, metas);
//        TableAssembler.buildData(tableVO, rows, metas);
//        return tableVO;
//    }
//
//    public List<KVVO> pullOverview(SecTargetReachViewDTO queryDTO) {
//        List<UserIdCode> genSecIdCodes = ServletContextUtil.getServletContext().getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return Lists.newArrayList();
//        }
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_pull_target_kv").values();
//        List<SsoUserId> leaderIds = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        List<SsoUserId> saleDepartmentUserIds = departmentExternalService.getSaleDepartmentUserId();
//        saleDepartmentUserIds.removeAll(leaderIds);
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, null, saleDepartmentUserIds);
//        List<Row> rows = activityTargetAnalysisRepository.pullOverview(activityViewReachQuery);
//        if (CollectionUtils.isEmpty(rows)) {
//            return Collections.emptyList();
//        }
//        Meta showMeta = null;
//        for (Meta meta : metas) {
//            if (meta.getIsShow()) {
//                showMeta = meta;
//                break;
//            }
//        }
//        return KVAssembler.buildData(showMeta, metas, rows);
//    }
//
//    public ChartVO pullChart(ActivityTrendDTO queryDTO) {
//        String dimName;
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityViewReachQuery activityAnalysisQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, null);
//        activityAnalysisQuery.setTargetType(TargetType.PULL.getVal());
//        List<Row> rows = activityTargetAnalysisRepository.getChartData(activityAnalysisQuery);
//        ChartVO chart = new ChartVO("招募趋势");
//        if (CollectionUtils.isEmpty(rows)) {
//            return chart;
//        }
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_pull_trend_line").values();
//        List<String> metaShowNames = new ArrayList<>();
//        Collection<Meta> queryMetas = new ArrayList<>();
//        if (queryDTO.getSubjectType() != 40 && queryDTO.getDimId() != -999) {
//            dimName = activityTargetAnalysisRepository.getDimName(activityAnalysisQuery);
//        } else {
//            dimName = "总招募";
//        }
//        for (Meta meta : metas) {
//            if (meta.getColName().equals("own_pull_data")) {
//                meta.dynamicShowName(dimName);
//                queryMetas.add(meta);
//                metaShowNames.add(dimName);
//            } else if (meta.getColName().equals("composite_data")) {
//                queryMetas.add(meta);
//                metaShowNames.add(meta.getShowName());
//            }
//        }
//        return chart.addLegend(metaShowNames)
//                .buildXAxis(rows, "dt")
//                .buildSeries(rows, queryMetas);
//    }
//
//    public ChartVO saleChart(ActivityTrendDTO queryDTO) {
//        String dimName;
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityViewReachQuery activityAnalysisQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, null);
//        activityAnalysisQuery.setTargetType(TargetType.SALE.getVal());
//        List<Row> rows = activityTargetAnalysisRepository.getChartData(activityAnalysisQuery);
//        if (queryDTO.getSubjectType() != 40 && queryDTO.getDimId() != -999) {
//            dimName = activityTargetAnalysisRepository.getDimName(activityAnalysisQuery);
//        } else {
//            dimName = "总销售";
//        }
//        ChartVO chart = new ChartVO("销售趋势");
//        if (CollectionUtils.isEmpty(rows)) {
//            return chart;
//        }
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_sale_trend_line").values();
//        List<String> metaShowNames = new ArrayList<>();
//        Collection<Meta> queryMetas = new ArrayList<>();
//        for (Meta meta : metas) {
//            if (meta.getColName().equals("sec_sale_data")) {
//                meta.dynamicShowName(dimName);
//                queryMetas.add(meta);
//                metaShowNames.add(dimName);
//            } else if (meta.getColName().equals("composite_data")) {
//                queryMetas.add(meta);
//                metaShowNames.add(meta.getShowName());
//            }
//        }
//        return chart.addLegend(metaShowNames)
//                .buildXAxis(rows, "dt")
//                .buildSeries(rows, queryMetas);
//    }
//
//    public List<KVVO> dailyOverview(ActivityQueryDTO queryDTO) {
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return Lists.newArrayList();
//        }
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_daily_index_kv").values();
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        ActivityAnalysisQuery activityAnalysisQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail);
//        List<Row> rows = activityTargetAnalysisRepository.dailyOverview(activityAnalysisQuery);
//        return KVAssembler.buildData(metas, rows.get(0));
//    }
//
//    public ChartVO dailyChart(ActivityQueryDTO queryDTO) {
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_daily_trend_line").values();
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        ActivityAnalysisQuery activityAnalysisQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail);
//        activityAnalysisQuery.dayView();
//        List<Row> rows = activityTargetAnalysisRepository.dailyChart(activityAnalysisQuery);
//        ChartVO chart = new ChartVO("日常趋势");
//        Collection<Meta> queryMetas = new ArrayList<>();
//        List<String> metaShowNames = new ArrayList<>();
//        for (Meta meta : metas) {
//            if (meta.getColName().startsWith(queryDTO.getMetaKey())) {
//                queryMetas.add(meta);
//                metaShowNames.add(meta.getShowName());
//            }
//        }
//        return chart.addLegend(metaShowNames)
//                .buildXAxis(rows, "dt")
//                .buildSeries(rows, queryMetas);
//    }
//
//    public TableVO secSaleTargetTable(SecTargetReachViewDTO queryDTO) {
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        List<SsoUserId> leaderIds = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        List<SsoUserId> saleDepartmentUserIds = departmentExternalService.getSaleDepartmentUserId();
//        saleDepartmentUserIds.removeAll(leaderIds);
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail, saleDepartmentUserIds);
//        activityViewReachQuery.setTargetType(TargetType.SALE.getVal());
//        activityViewReachQuery.setRoleType(RoleTargetStarType.SEC.getVal());
//        // top 10
//        activityViewReachQuery.setOffset(0);
//        activityViewReachQuery.setPageSize(10);
//        activityViewReachQuery.setOrderColumn("complete_data");
//        activityViewReachQuery.setOrderType("desc");
//        List<Row> rows = activityTargetAnalysisRepository.userTargetReach(activityViewReachQuery);
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_sec_sale_complete_table").values();
//        return getTableVO(new TableVO(), rows, metas, "SEC", "", false);
//    }
//
//    public TableVO secPullTargetTable(SecTargetReachViewDTO queryDTO) {
//        List<UserIdCode> genSecIdCodes = ServletContextUtil.getServletContext().getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        List<SsoUserId> leaderIds = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        List<SsoUserId> saleDepartmentUserIds = departmentExternalService.getSaleDepartmentUserId();
//        saleDepartmentUserIds.removeAll(leaderIds);
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail, saleDepartmentUserIds);
//        activityViewReachQuery.setTargetType(TargetType.PULL.getVal());
//        activityViewReachQuery.setRoleType(RoleTargetStarType.SEC.getVal());
//        // top 10
//        activityViewReachQuery.setOffset(0);
//        activityViewReachQuery.setPageSize(10);
//        activityViewReachQuery.setOrderColumn("complete_data");
//        activityViewReachQuery.setOrderType("desc");
//        List<Row> rows = activityTargetAnalysisRepository.userTargetReach(activityViewReachQuery);
//        Collection<Meta> metas = metaHolder.listMeta("activity_view_sec_pull_complete_table").values();
//        return getTableVO(new TableVO(), rows, metas, "SEC", "", false);
//    }
//
//    public TableVO secTargetReachTable(ActivityTargetReachQueryDTO queryDTO, String yamlName) {
//        TableVO tableVO = new TableVO();
//        List<UserIdCode> genSecIdCodes = ServletContextUtil.getServletContext().getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        List<SsoUserId> leaderIds = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        List<SsoUserId> saleDepartmentUserIds = departmentExternalService.getSaleDepartmentUserId();
//        saleDepartmentUserIds.removeAll(leaderIds);
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail, saleDepartmentUserIds);
//        activityViewReachQuery.setRoleType(RoleTargetStarType.SEC.getVal());
//        int total = activityTargetAnalysisRepository.userTargetReachTotal(activityViewReachQuery);
//        if (queryDTO.getOffset() > total) {
//            return tableVO;
//        }
//        List<Row> rows = activityTargetAnalysisRepository.userTargetReach(activityViewReachQuery);
//        tableVO.setPage(PageResultVO.of(queryDTO.getPageIndex(), queryDTO.getPageSize(), total));
//        Collection<Meta> metas = metaHolder.listMeta(yamlName).values();
//        return getTableVO(tableVO, rows, metas, "SEC", "", true);
//    }
//
//    public TableVO serviceProviderTargetReachTable(ActivityTargetReachQueryDTO queryDTO, String yamlName) {
//        TableVO tableVO = new TableVO();
//        List<UserIdCode> genSecIdCodes = ServletContextUtil.getServletContext().getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        List<SsoUserId> leaderIds = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        List<SsoUserId> saleDepartmentUserIds = departmentExternalService.getSaleDepartmentUserId();
//        saleDepartmentUserIds.removeAll(leaderIds);
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail, saleDepartmentUserIds);
//        activityViewReachQuery.setRoleType(RoleTargetStarType.SERVICE_PROVIDER.getVal());
//        List<Row> rows = activityTargetAnalysisRepository.userTargetReach(activityViewReachQuery);
//        int total = activityTargetAnalysisRepository.userTargetReachTotal(activityViewReachQuery);
//        if (queryDTO.getOffset() > total) {
//            return tableVO;
//        }
//        tableVO.setPage(PageResultVO.of(queryDTO.getPageIndex(), queryDTO.getPageSize(), total));
//        Collection<Meta> metas = metaHolder.listMeta(yamlName).values();
//        return getTableVO(tableVO, rows, metas, "服务商", "bl_sec_id_code", true);
//    }
//
//    public TableVO dealerTargetReachTable(ActivityTargetReachQueryDTO queryDTO, String yamlName) {
//        TableVO tableVO = new TableVO();
//        UserServletContext servletContext = ServletContextUtil.getServletContext();
//        List<UserIdCode> genSecIdCodes = servletContext.getGenSecIdCodes();
//        if (CollectionUtils.isEmpty(genSecIdCodes)) {
//            return null;
//        }
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        List<SsoUserId> leaderIds = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        List<SsoUserId> saleDepartmentUserIds = departmentExternalService.getSaleDepartmentUserId();
//        saleDepartmentUserIds.removeAll(leaderIds);
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, genSecIdCodes, activityDetail, saleDepartmentUserIds);
//        activityViewReachQuery.setRoleType(RoleTargetStarType.DEALER.getVal());
//        int total = activityTargetAnalysisRepository.userTargetReachTotal(activityViewReachQuery);
//        if (queryDTO.getOffset() > total) {
//            return tableVO;
//        }
//        List<Row> rows = activityTargetAnalysisRepository.userTargetReach(activityViewReachQuery);
//        Collection<Meta> metas = metaHolder.listMeta(yamlName).values();
//        tableVO.setPage(PageResultVO.of(queryDTO.getPageIndex(), queryDTO.getPageSize(), total));
//        return getTableVO(tableVO, rows, metas, "经销商", "bl_sec_id_code", true);
//    }
//
//    public TableVO directorTargetReachTable(ActivityStaffTargetReachQueryDTO queryDTO, String yamlName) {
//        //查询部门内员工
//        if (CollectionUtils.isEmpty(queryDTO.getSsoUserIds())) {
//            if (!CollectionUtils.isEmpty(queryDTO.getDepartmentId())) {
//                List<StaffSimpleInfo> ssoUsers = departmentExternalService.getStaffSimpleInfosByDepartmentIds(queryDTO.getDepartmentId());
//
//                List<Long> ssoUserIds = ssoUsers.stream()
//                        .map(StaffSimpleInfo::getSsoUserId)
//                        .map(com.tengju.user.domain.shared.IdObject::getValue)
//                        .collect(Collectors.toList());
//
//                //负责人去除
//                List<Long> leaderIds = Lists.newArrayList();
//                for (Long departmentId : queryDTO.getDepartmentId()) {
//                    Long leader = departmentLeader.get(departmentId);
//                    leaderIds.add(leader);
//                }
//                ssoUserIds.removeAll(leaderIds);
//                queryDTO.setSsoUserIds(ssoUserIds);
//            } else {
//                List<SsoUserId> saleDepartmentUserId = departmentExternalService.getSaleDepartmentUserId();
//                List<Long> ssoIds = saleDepartmentUserId.stream()
//                        .map(com.tengju.user.domain.shared.IdObject::getValue).collect(Collectors.toList());
//                Collection<Long> leaderIds = departmentLeader.values();
//                ssoIds.removeAll(leaderIds);
//                queryDTO.setSsoUserIds(ssoIds);
//            }
//        }
//        ActivityDetail activityDetail = activityTargetRepository.getActivityById(new ActivityId(queryDTO.getActivityId()));
//        ActivityViewReachQuery activityViewReachQuery = QueryAssembler.assemblerToQuery(queryDTO, activityDetail);
//        TableVO tableVO = new TableVO();
//        int total = activityTargetAnalysisRepository.chiefTargetReachTotal(activityViewReachQuery);
//        if (queryDTO.getOffset() > total) {
//            return tableVO;
//        }
//        List<Row> chiefRows = activityTargetAnalysisRepository.chiefTargetReach(activityViewReachQuery);
//        tableVO.addColumn(null, ColumnVO.of("showName", "销售总监", false));
//
//        Collection<Meta> metas = metaHolder.listMeta(yamlName).values();
//        TableAssembler.buildColumns(tableVO, metas);
//        TableAssembler.buildData(tableVO, chiefRows, metas, List.of("chief_id"));
//
//        //添加排序序号
//        tableVO.setPage(PageResultVO.of(queryDTO.getPageIndex(), queryDTO.getPageSize(), total));
//        tableVO.addColumn(null, ColumnVO.of("index", "序号", false));
//        PageResultVO page = tableVO.getPage();
//        int index = Math.max((page.getPageIndex() - 1), 0) * page.getPageSize() + 1;
//
//        if (CollectionUtils.isEmpty(tableVO.getRecords())) {
//            return tableVO;
//        }
//        for (Map<String, Object> record : tableVO.getRecords()) {
//            record.put("index", index++);
//            long chiefId = CastUtil.castLong(record.get("chief_id"));
//            List<StaffInfo> staffInfo =
//                    departmentExternalService.getStaffInfos(List.of(new SsoUserId(chiefId)));
//            if (CollectionUtils.isEmpty(staffInfo)) {
//                record.put("showName", "");
//            } else {
//                record.put("showName", staffInfo.get(0).getRealName() + "(" + staffInfo.get(0).getNickname() + ")");
//            }
//        }
//
//        return tableVO;
//    }
//
//    public String dataUpdateTime(ActivityQueryDTO queryDTO) {
//        ActivityAnalysisQuery query = QueryAssembler.assemblerToQuery(queryDTO, null, null);
//        LocalDateTime time = activityTargetAnalysisRepository.dataUpdateTime(query);
//        return DateUtil.formatLocalDateTime("yyyy-MM-dd HH:mm", time);
//    }
//
//    // 构建TableVO 并且添加动态配置角色名称展示
//    private TableVO getTableVO(TableVO table, List<Row> rows, Collection<Meta> metas, String labelShow, String blSecId, boolean orderIndex) {
//        TableAssembler.buildColumns(table, metas);
//        table.addColumn(null, ColumnVO.of("showName", labelShow, false));
//        if (StringUtils.isNotBlank(blSecId)) {
//            table.addColumn("hk_sale_hold_ratio", ColumnVO.of("blSecId", "所属SEC", false));
//        }
//        int index = 1;
//        if (orderIndex) {
//            table.addColumn(null, ColumnVO.of("index", "序号", false));
//            PageResultVO page = table.getPage();
//            index = Math.max((page.getPageIndex() - 1), 0) * page.getPageSize() + index;
//        }
//        List<UserIdCode> userIdCodes = rows.stream()
//                .map(v -> {
//                    return List.of(
//                            CastUtil.castLong(v.getValue("user_id")),
//                            CastUtil.castLong(v.getValue("bl_star1_id_code")),
//                            CastUtil.castLong(v.getValue("bl_star2_id_code")),
//                            CastUtil.castLong(v.getValue("bl_star3_id_code")),
//                            CastUtil.castLong(v.getValue("bl_star4_id_code")),
//                            CastUtil.castLong(v.getValue("bl_ec_id_code")),
//                            CastUtil.castLong(v.getValue("bl_sec_id_code"))
//                    );
//                })
//                .flatMap(Collection::stream)
//                .distinct()
//                .filter(Objects::nonNull)
//                .map(UserIdCode::of)
//                .collect(Collectors.toList());
//        List<UserDocument> userDocumentList = pageGetUserDoc(userIdCodes);
//        Map<Long, UserDocument> userIdDocumentMap = userDocumentList.stream()
//                .filter(Objects::nonNull)
//                .collect(Collectors.toMap(UserDocument::getIdCode, s -> s, (s1, s2) -> s1));
//        TableAssembler.buildData(table, rows, metas, List.of("chief_id", "user_id", "bl_star1_id_code", "bl_star2_id_code", "bl_star3_id_code", "bl_star4_id_code", "bl_ec_id_code", "bl_sec_id_code", blSecId));
//        if (CollectionUtils.isEmpty(table.getRecords())) {
//            return table;
//        }
//
//        List<SsoUserId> chiefIds = table.getRecords().stream()
//                .map(map -> map.get("chief_id"))
//                .map(Objects::toString)
//                .map(Long::parseLong)
//                .filter(id -> id > 0)
//                .map(SsoUserId::new)
//                .collect(Collectors.toList());
//        List<SsoUserId> leaderId = departmentLeader.values().stream().map(SsoUserId::new).collect(Collectors.toList());
//        chiefIds.addAll(leaderId);
//        List<StaffInfo> staffInfos = departmentExternalService.getStaffInfos(chiefIds);
//        Map<SsoUserId, StaffInfo> staffMap = staffInfos.stream()
//                .collect(Collectors.toMap(StaffInfo::getSsoUserId, Function.identity()));
//
//        for (Map<String, Object> record : table.getRecords()) {
//            if (orderIndex) {
//                record.put("index", index++);
//            }
//
//            long chiefId = Long.parseLong(record.get("chief_id").toString());
//            if (chiefId > 0L) {
//                StaffInfo staffInfo = staffMap.get(new SsoUserId(chiefId));
//                record.put("chiefName", staffInfo.getRealName());
//                Long leaderSsoId = departmentLeader.get(staffInfo.getDepartmentId());
//                StaffInfo leaderInfo = staffMap.get(new SsoUserId(leaderSsoId));
//                record.put("chiefLeaderName", leaderInfo.getRealName());
//            } else {
//                record.put("chiefName", "");
//                record.put("chiefLeaderName", "");
//
//            }
//
//
//            Long userId = Long.parseLong(record.get("user_id").toString());
//            if (userIdDocumentMap.get(userId) != null) {
//                String nickName = new NicknameVO(userIdDocumentMap.get(userId).getNickName(), userIdDocumentMap.get(userId).getMobile()).toString();
//                String userStarLevel = StarLevelEnum.parseByStarLevel(userIdDocumentMap.get(userId).getStarLevel()).getDesc();
//                Long id = userIdDocumentMap.get(userId).getIdCode();
//                String userInfo = nickName + " " + userStarLevel + " (" + id + ")";
//                record.put("showName", userInfo);
//                record.put("userStarLevel", userStarLevel);
//                record.put("userId", id);
//                record.put("userNickName", nickName);
//                record.put("userName", userIdDocumentMap.get(userId).getName());
//            } else {
//                record.put("showName", "-");
//            }
//            if (StringUtils.isNotBlank(blSecId)) {
//                Long secId = Long.parseLong(record.get(blSecId).toString());
//                if (userIdDocumentMap.get(secId) != null) {
//                    String secNickName = new NicknameVO(
//                            userIdDocumentMap.get(secId).getNickName(),
//                            userIdDocumentMap.get(secId).getMobile()).toString();
//                    String secInfo = secNickName + " " + StarLevelEnum.parseByStarLevel(userIdDocumentMap.get(secId).getStarLevel()).getDesc()
//                            + " (" + userIdDocumentMap.get(secId).getIdCode() + ")";
//                    record.put("blSecId", secInfo);
//                } else {
//                    record.put("blSecId", "-");
//                }
//
//                if (record.containsKey("bl_star1_id_code")) {
//                    Long blStar1IdCode = Long.parseLong(record.get("bl_star1_id_code").toString());
//                    if (userIdDocumentMap.get(blStar1IdCode) != null) {
//                        UserDocument userDocument = userIdDocumentMap.get(blStar1IdCode);
//                        String blStar1Name = userDocument.getName();
//                        record.put("bl_star1_id_code", blStar1IdCode);
//                        record.put("bl_star1_name", blStar1Name);
//                        record.put("bl_star1_nickname", userDocument.getNickName());
//                    }
//                }
//                if (record.containsKey("bl_star2_id_code")) {
//                    Long blStar2IdCode = Long.parseLong(record.get("bl_star2_id_code").toString());
//                    if (userIdDocumentMap.get(blStar2IdCode) != null) {
//                        UserDocument userDocument = userIdDocumentMap.get(blStar2IdCode);
//                        String blStar2Name = userDocument.getName();
//                        record.put("bl_star2_id_code", blStar2IdCode);
//                        record.put("bl_star2_name", blStar2Name);
//                        record.put("bl_star2_nickname", userDocument.getNickName());
//                    }
//                }
//                if (record.containsKey("bl_star3_id_code")) {
//                    Long blStar3IdCode = Long.parseLong(record.get("bl_star3_id_code").toString());
//                    if (userIdDocumentMap.get(blStar3IdCode) != null) {
//                        UserDocument userDocument = userIdDocumentMap.get(blStar3IdCode);
//                        String blStar3Name = userDocument.getName();
//                        record.put("bl_star3_id_code", blStar3IdCode);
//                        record.put("bl_star3_name", blStar3Name);
//                        record.put("bl_star3_nickname", userDocument.getNickName());
//                    }
//                }
//                if (record.containsKey("bl_star4_id_code")) {
//                    Long blStar4IdCode = Long.parseLong(record.get("bl_star4_id_code").toString());
//                    if (userIdDocumentMap.get(blStar4IdCode) != null) {
//                        UserDocument userDocument = userIdDocumentMap.get(blStar4IdCode);
//                        String blStar4Name = userDocument.getName();
//                        record.put("bl_star4_id_code", blStar4IdCode);
//                        record.put("bl_star4_name", blStar4Name);
//                        record.put("bl_star4_nickname", userDocument.getNickName());
//                    }
//                }
//                if (record.containsKey("bl_ec_id_code")) {
//                    Long blEcIdCode = Long.parseLong(record.get("bl_ec_id_code").toString());
//                    if (userIdDocumentMap.get(blEcIdCode) != null) {
//                        UserDocument userDocument = userIdDocumentMap.get(blEcIdCode);
//                        String blEcName = userDocument.getName();
//                        record.put("bl_ec_id_code", blEcIdCode);
//                        record.put("bl_ec_name", blEcName);
//                        record.put("bl_ec_nickname", userDocument.getNickName());
//                    }
//                }
//            }
//        }
//        return table;
//    }
//
//    private List<UserDocument> pageGetUserDoc(List<UserIdCode> userIdCodes) {
//        List<List<UserIdCode>> partitions = com.google.common.collect.Lists.partition(userIdCodes, 20000);
//        List<UserDocument> result = new ArrayList<>();
//        for (List<UserIdCode> partition : partitions) {
//            UserSearchForm form = new UserSearchForm();
//            form.setIdCodes(partition);
//            List<UserDocument> userDocumentList = userDocumentService.batchSearchScroll(form);
//            if (CollectionUtils.isEmpty(userDocumentList)) {
//                continue;
//            }
//            result.addAll(userDocumentList);
//        }
//        return result;
//    }
//
//
//    public static void main(String[] args) {
//        BigDecimal bigDecimal = BigDecimal.valueOf(1202370.98);
//        System.out.println(bigDecimal.doubleValue());
//    }
//
//}
